package main

import (
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// User 模型定义
type User struct {
	gorm.Model
	Username string `json:"username"`
	Password string `json:"password"` // 在实际应用中，密码应该是哈希过的
}

func main() {
	// 初始化数据库连接
	dsn := "xxxxxxxxxxx/laravel?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	// 自动迁移，创建或更新表结构
	db.AutoMigrate(&User{})

	// 创建 Gin 路由引擎
	router := gin.Default()

	// 登录接口
	router.POST("/login", func(c *gin.Context) {
		var user User
		// 从请求体中解析 JSON 数据
		if err := c.ShouldBindJSON(&user); err != nil {
			c.JSON(400, gin.H{"error": "Failed to bind JSON data"})
			return
		}

		// 在数据库中查找用户
		if db.Where(&User{Username: user.Username}).Attrs(User{Password: user.Password}).First(&user).Error != nil {
			c.JSON(401, gin.H{"error": "Unauthorized"})
			return
		}

		// 用户验证成功，返回 token 或其他认证信息
		c.JSON(200, gin.H{"message": "Login successful"})
	})

	// 注册接口
	router.POST("/register", func(c *gin.Context) {
		var user User
		// 从请求体中解析 JSON 数据
		if err := c.ShouldBindJSON(&user); err != nil {
			c.JSON(400, gin.H{"error": "Failed to bind JSON data"})
			return
		}

		// 创建新用户
		if db.Create(&user).Error != nil {
			c.JSON(500, gin.H{"error": "Failed to create user"})
			return
		}

		// 用户注册成功，返回成功信息
		c.JSON(201, gin.H{"message": "User registered successfully", "user": user})
	})

	// 启动 Gin 服务器
	router.Run(":8080")
}
